Cloud computing is a model for enabling on-demand network access to a shared pool of configurable computing resources (e.g., networks, servers, storage, applications, and services) that can be rapidly provisioned and released with minimal management effort or service provider interaction. Cloud computing providers currently offer infrastructure as a service (IaaS) and platform as a service (PaaS). IaaS is a provision model in which equipment such as storage equipment, computing equipment, networking equipment, etc. is provided on a per use basis. PaaS is a provision model in which a computing platform and solution stack are delivered to clients as a service on a per use basis. Each of these services has the properties of elasticity (ability to deal with new nodes being added and existing nodes being removed dynamically), high availability, scalability, and linear response times.
One service that has not been successfully moved to the cloud computing model is managed data storage, which is conventionally performed by databases. Data storage is stateful, which makes data as a service (DaaS) much more challenging than any of the other categories of cloud computing. Traditional data storage uses databases such as structured query language (SQL) and not only SQL (NoSQL) databases. Databases do not scale, so they tend to run on a single machine or a few machines running in a fixed cluster. Therefore, databases are not distributed by nature. This becomes a problem in the cloud because in clouds there is no guarantee that a particular server will be available at any given time. The lack of distribution for databases hampers elasticity and high availability, two of the requirements for cloud computing services. Therefore traditional database data storage does not work for DaaS.
Distributed databases, also known as data grids and in-memory data grids, have since become a better alternative to databases in clouds. Examples of data grid platforms include, for example, JBoss® Infinispan®, Oracle® Coherence® or Hadoop™. Data grids can scale up to thousands of nodes. Data grid platforms also improve the scalability of non-cloud applications by removing database bottlenecks and single points of failure. Traditionally, clients have interacted with a data grid platform, such as Infinispan®, in a peer-to-peer (P2P) manner, where the data grid platform and the client code that accesses the data grid platform reside within the same virtual memory. In a P2P environment, clients can perform XA transactions. In the XA (X/Open XA) architecture, an XA transaction is a distributed transaction that consists of multiple operations that access resources, such as an in-memory data grid. For example, a banking application wishes to conduct an XA transaction that consists of two operations (1) deduct money from a first bank account and (2) add the deducted money to a second bank account. Either both of the operations relating to the XA transaction will be permanent, if successful, or none of them will occur, and the data in an in-memory data grid relating to the bank accounts can be rolled back to a previous state as if the transaction never occurred. Traditionally, XA transactions of an in-memory data grid are limited to a P2P environment. However, there are situations when accessing a data grid platform in a client-server mode makes more sense than accessing it via P2P. Conventional client-server access to a data grid, however, is limited to simple, non-transactional access.